package main

import "fmt"

func main() {
	// 指针（pointer）在Go语言中可以被拆分为两个核心概念：
	// 类型指针，允许对这个指针类型的数据进行修改，传递数据可以直接使用指针，而无须拷贝数据，类型指针不能进行偏移和运算。
	// 切片，由指向起始元素的原始指针、元素数量和容量组成。
	var cat int = 1
	var ptr *int = &cat // 使用 & 操作符获取变量的内存地址
	fmt.Printf("cat address is %p \n", &cat)
	fmt.Printf("ptr save address is %p \n", ptr)

	fmt.Println("cat value is ", cat)
	fmt.Printf("ptr type is : %T\n", ptr)
	fmt.Println("*ptr value is ", *ptr)
	*ptr = 2 // 使用 * 操作符获取指针指向的变量的值并进行修改
	fmt.Println("cat value is ", cat)

	c:=*ptr
	fmt.Println("cat value is ", c)

	// Go语言还提供了另外一种方法来创建指针变量，格式如下：new(类型)
	var pInt *int = new(int)
	*pInt = 100
	fmt.Println("pInt value is ", *pInt)
}
